<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>es6之前的变量声明</h1>
    <p>
        在 javascript里面变量声明的方式有很多种，在es6之前最常见的就是var。
    </p>
    <p>
        var 做变量声明的时候，有什么特点？
    </p>
</body>
<script>
    /*  
     var a;
     var b;
 
     a = undefined;
     b = undefined; */

    /* var 关键字声明变量 */
    console.log('在a声明之前进行使用，是否可行？', a); // undefined 如果一段代码里面，一个变量
    // 没有声明的语句，而是由于有预解析的功能，提前使用，这样显得非常的突兀，容易造成混淆和操作。

    // 是否报错 不会 undefined 主要的原因是 var 声明变量的时候，可以做预解析。
    // 什么叫做预解析？面试或者笔试经常被提及的问题？
    // 预解析，一般也叫做变量提示。指的是我们的javascript代码在真正的执行之前，先进行代码的分析
    // 一般要做如下的几步的分析
    // 1. 语法分析
    // 分析我们的代码的语法是否规范，例如 声明是否合法，关键字是否写多了
    // 2. 词法分析
    // 分析 我们的var声明关键字，
    // 2.1 在执行前把 全局内所有的 var 变量声明，提升到代码块的最上面
    // 2.2 给变量赋一个初始值，值为 undefined
    // 2.3 var 提升完毕后，才开始代码执行


    var a = 1;/* 声明和赋值一起完成的 */
    // a = 1;
    var b = 23;
    // b = 1;
    console.log(a + b);



</script>

</html>